if (_manager.isNull() && sharingPossible) {
_manager.reset(new ShareManager(_accountState->account(), this));
connect(_manager.data(), &ShareManager::sharesFetched, this, &ShareModel::slotSharesFetched);
+ connect(_manager.data(), &ShareManager::sharedWithMeFetched, this, &ShareModel::slotSharedWithMeFetched);
connect(_manager.data(), &ShareManager::shareCreated, this, [&] {
_manager->fetchShares(_sharePath);
});
});
_manager->fetchShares(_sharePath);
+ _manager->fetchSharedWithMe(_sharePath);
}
}
qCInfo(lcSharing) << "Fetched" << shares.count() << "shares";
for (const auto &share : shares) {
- if (share.isNull()) {
+ if (share.isNull() ||
+ share->account().isNull() ||
+ share->getUidOwner() != share->account()->davUser()) {
continue;
- } else if (const auto selfUserId = share->account()->davUser(); share->getUidOwner() != selfUserId) {
- _displayShareOwner = true;
- Q_EMIT displayShareOwnerChanged();
- _shareOwnerDisplayName = share->getOwnerDisplayName();
- Q_EMIT shareOwnerDisplayNameChanged();
- _shareOwnerAvatar = "image://avatars/user-id="
- + share->getUidOwner()
- + "/local-account:"
- + share->account()->displayName();
- Q_EMIT shareOwnerAvatarChanged();
-
- if (share->getShareType() == Share::TypeUser &&
- share->getShareWith() &&
- share->getShareWith()->shareWith() == selfUserId)
- {
- const auto userShare = share.objectCast<UserGroupShare>();
- const auto expireDate = userShare->getExpireDate();
- const auto daysToExpire = QDate::currentDate().daysTo(expireDate);
- _sharedWithMeExpires = expireDate.isValid();
- Q_EMIT sharedWithMeExpiresChanged();
- _sharedWithMeRemainingTimeString = daysToExpire > 1
- ? tr("%1 days").arg(daysToExpire)
- : daysToExpire > 0
- ? tr("1 day")
- : tr("Today");
- Q_EMIT sharedWithMeRemainingTimeStringChanged();
- }
- } else {
- slotAddShare(share);
}
+
+ slotAddShare(share);
}
// Perform forward pass on shares and check for duplicate display names; store these indeces so
handleLinkShare();
}
+void ShareModel::slotSharedWithMeFetched(const QList<OCC::SharePtr> &shares)
+{
+ qCInfo(lcSharing) << "Fetched" << shares.count() << "shares that have been shared_with_me";
+
+ for (const auto &share : shares) {
+ if (share.isNull()) {
+ continue;
+ }
+
+ const auto selfUserId = share->account()->davUser();
+ if (share->getUidOwner() == selfUserId) {
+ continue;
+ }
+
+ _displayShareOwner = true;
+ Q_EMIT displayShareOwnerChanged();
+ _shareOwnerDisplayName = share->getOwnerDisplayName();
+ Q_EMIT shareOwnerDisplayNameChanged();
+ _shareOwnerAvatar = QStringLiteral("image://avatars/user-id=%1/local-account:%2")
+ .arg(share->getUidOwner(), share->account()->displayName());
+ Q_EMIT shareOwnerAvatarChanged();
+
+ if (share->getShareType() == Share::TypeUser &&
+ share->getShareWith() &&
+ share->getShareWith()->shareWith() == selfUserId)
+ {
+ const auto userShare = share.objectCast<UserGroupShare>();
+ const auto expireDate = userShare->getExpireDate();
+ const auto daysToExpire = QDate::currentDate().daysTo(expireDate);
+ _sharedWithMeExpires = expireDate.isValid();
+ Q_EMIT sharedWithMeExpiresChanged();
+ _sharedWithMeRemainingTimeString = daysToExpire > 1
+ ? tr("%1 days").arg(daysToExpire)
+ : daysToExpire == 1
+ ? tr("1 day")
+ : tr("Today");
+ Q_EMIT sharedWithMeRemainingTimeStringChanged();
+ }
+ }
+}
+
void ShareModel::setupInternalLinkShare()
{
if (!_accountState ||
void slotAddShare(const OCC::SharePtr &share);
void slotRemoveShareWithId(const QString &shareId);
void slotSharesFetched(const QList<OCC::SharePtr> &shares);
+ void slotSharedWithMeFetched(const QList<OCC::SharePtr> &shares);
void slotAddSharee(const OCC::ShareePtr &sharee);
void slotRemoveSharee(const OCC::ShareePtr &sharee);
addParam(QString::fromLatin1("path"), path);
addParam(QString::fromLatin1("reshares"), QStringLiteral("true"));
- addParam(QString::fromLatin1("shared_with_me"), QStringLiteral("true"));
for (auto it = std::cbegin(params); it != std::cend(params); ++it) {
addParam(it.key(), it.value());
start();
}
-void OcsShareJob::getSharedWithMe()
+void OcsShareJob::getSharedWithMe(const QString &path)
{
setVerb("GET");
- addParam(QLatin1String("shared_with_me"), QLatin1String("true"));
+
+ addParam(QString::fromLatin1("path"), path);
+ addParam(QString::fromLatin1("shared_with_me"), QStringLiteral("true"));
+
start();
}
/**
* Returns information on the items shared with the current user.
+ * @param path Path to request shares for (default all shares)
*/
- void getSharedWithMe();
+ void getSharedWithMe(const QString &path = "");
static const QString _pathForSharesRequest;
void ShareManager::fetchShares(const QString &path)
{
- auto *job = new OcsShareJob(_account);
+ const auto job = new OcsShareJob(_account);
connect(job, &OcsShareJob::shareJobFinished, this, &ShareManager::slotSharesFetched);
connect(job, &OcsJob::ocsError, this, &ShareManager::slotOcsError);
job->getShares(path);
}
-void ShareManager::slotSharesFetched(const QJsonDocument &reply)
+void ShareManager::fetchSharedWithMe(const QString &path)
+{
+ const auto sharedWithMeJob = new OcsShareJob(_account);
+ connect(sharedWithMeJob, &OcsShareJob::shareJobFinished, this, &ShareManager::slotSharedWithMeFetched);
+ connect(sharedWithMeJob, &OcsJob::ocsError, this, &ShareManager::slotOcsError);
+ sharedWithMeJob->getSharedWithMe(path);
+}
+
+const QList<SharePtr> ShareManager::parseShares(const QJsonDocument &reply) const
{
qDebug() << reply;
auto tmpShares = reply.object().value("ocs").toObject().value("data").toArray();
}
qCDebug(lcSharing) << "Sending " << shares.count() << "shares";
+ return shares;
+}
+
+void ShareManager::slotSharesFetched(const QJsonDocument &reply)
+{
+ const auto shares = parseShares(reply);
emit sharesFetched(shares);
}
-QSharedPointer<UserGroupShare> ShareManager::parseUserGroupShare(const QJsonObject &data)
+void ShareManager::slotSharedWithMeFetched(const QJsonDocument &reply)
+{
+ const auto shares = parseShares(reply);
+ emit sharedWithMeFetched(shares);
+}
+
+QSharedPointer<UserGroupShare> ShareManager::parseUserGroupShare(const QJsonObject &data) const
{
ShareePtr sharee(new Sharee(data.value("share_with").toString(),
data.value("share_with_displayname").toString(),
note));
}
-QSharedPointer<LinkShare> ShareManager::parseLinkShare(const QJsonObject &data)
+QSharedPointer<LinkShare> ShareManager::parseLinkShare(const QJsonObject &data) const
{
QUrl url;
*/
void fetchShares(const QString &path);
+ /**
+ * Fetch shares with the current user for path
+ *
+ * @param path The path to get the shares for relative to the users folder on the server
+ *
+ * On success the sharedWithMeFetched signal is emitted
+ * In case of a server error the serverError signal is emitted
+ */
+ void fetchSharedWithMe(const QString &path);
+
signals:
void shareCreated(const OCC::SharePtr &share);
void linkShareCreated(const QSharedPointer<OCC::LinkShare> &share);
void sharesFetched(const QList<OCC::SharePtr> &shares);
+ void sharedWithMeFetched(const QList<OCC::SharePtr> &shares);
void serverError(int code, const QString &message);
/** Emitted when creating a link share with password fails.
private slots:
void slotSharesFetched(const QJsonDocument &reply);
+ void slotSharedWithMeFetched(const QJsonDocument &reply);
void slotLinkShareCreated(const QJsonDocument &reply);
void slotShareCreated(const QJsonDocument &reply);
void slotOcsError(int statusCode, const QString &message);
void slotCreateE2eeShareJobFinised(int statusCode, const QString &message);
private:
- QSharedPointer<LinkShare> parseLinkShare(const QJsonObject &data);
- QSharedPointer<UserGroupShare> parseUserGroupShare(const QJsonObject &data);
+ QSharedPointer<LinkShare> parseLinkShare(const QJsonObject &data) const;
+ QSharedPointer<UserGroupShare> parseUserGroupShare(const QJsonObject &data) const;
SharePtr parseShare(const QJsonObject &data) const;
+ const QList<OCC::SharePtr> parseShares(const QJsonDocument &reply) const;
AccountPtr _account;
};